# __author__ = 'heyin'
# __date__ = '2019/2/21 10:16'
import os

import pymysql
import redis

r = redis.StrictRedis(host='123.160.246.41', port=6380, db=2, password='bxgj_2019')
# offset = 0  # 初始index为0，即从第1条记录开始
count = 5  # 一次爬取的关键词数量
# 每次启动前，先从redis读取当前位置
current_kw = r.get('current_kw')
if current_kw:
    # 不是初次运行
    kid = None
else:  # 初次运行
    kid = 0  # 初始id，只要比他大的记录取五条即可
while True:
    if kid is not None:
        connect2 = pymysql.connect(
            host='218.28.2.162',
            port=3306,
            db='bx_caiji',
            user='caiji_user',
            passwd='bxgj2019',
            charset='utf8'
        )
        cursor2 = connect2.cursor()

        kw_sql = 'SELECT keyword,id from bx_caiji_keywords WHERE id>%s limit %s;' % (kid, count)
        cursor2.execute(kw_sql)
        data = list(cursor2.fetchall())
        if len(data) == 0:
            cursor2.close()
            connect2.close()
            break
        data = str(data)
        cursor2.close()
        connect2.close()
    else:
        data = current_kw.decode('utf-8')
    # 爬取之前记录当前读取关键词的位置，以便接着爬
    r.set('current_kw', data)
    ret = os.system('scrapy crawl toutiao_search -a kws="%s"' % data)
    if ret == 0:
        # offset += count
        # [('保险排名', 6), ('保险新闻最新消息', 7), ('保险公司排名', 8), ('大平洋保险', 9), ('中国车险十大排名2017', 10)]
        # 这样设置的目的是，在爬取过程中，数据库数据如果有删除，使用limit offset的方式就可能会丢失关键词
        kid = eval(data)[-1][1]
    else:
        print('当前命令执行返回非0，有异常，ret=%s,kid=%s, 跳过当前词汇，使程序可正常执行'%(ret, kid))
        kid = eval(data)[-1][1]
